Spring ORM এবং Pagination এবং Sorting

Java Technologies - স্প্রিং ওআরএম (Spring ORM)
85
85

Spring ORM-এর সাহায্যে ডেটাবেস অপারেশন সহজ হলেও বড় ডেটাসেট থেকে ডেটা রিট্রিভ করা বেশ চ্যালেঞ্জ হতে পারে। Pagination এবং Sorting এই চ্যালেঞ্জ মোকাবিলা করার কার্যকর সমাধান। Spring ORM সাধারণত Hibernate বা JPA-এর মাধ্যমে Pagination এবং Sorting সহজতর করে।


Pagination (পেজিনেশন) কী?

Pagination হলো বড় ডেটাসেটকে ছোট ছোট অংশে ভাগ করে নির্দিষ্ট পরিমাণ ডেটা প্রদর্শনের পদ্ধতি। উদাহরণস্বরূপ, একটি ওয়েব পেজে একবারে ১০টি রেকর্ড দেখানোর প্রয়োজন হলে Pagination ব্যবহার করা হয়।

পেজিনেশনের মূল উপাদান:

  • Page Number: কোন পেজটি প্রদর্শিত হবে।
  • Page Size: প্রতি পেজে কতগুলো রেকর্ড থাকবে।

Sorting (সর্টিং) কী?

Sorting হলো ডেটাকে নির্দিষ্ট কলামের উপর ভিত্তি করে ক্রমানুসারে (Ascending বা Descending) সাজানোর পদ্ধতি। উদাহরণস্বরূপ, একটি ডেটাবেসে price কলামের ডেটা ছোট থেকে বড় বা বড় থেকে ছোট সাজানোর জন্য Sorting ব্যবহার করা হয়।

সর্টিংয়ের মূল উপাদান:

  • Sort Column: কোন কলামের উপর ভিত্তি করে ডেটা সাজানো হবে।
  • Sort Direction: ডেটা ক্রমানুসারে সাজানো হবে কি উল্টো ক্রমানুসারে।

Spring ORM-এ Pagination এবং Sorting-এর ব্যবহার

১. JPA-এর মাধ্যমে Pagination এবং Sorting

JPA-র Pageable এবং Sort ইন্টারফেস Spring Data JPA-তে Pagination এবং Sorting সহজ করে তোলে।

উদাহরণ:
// Pagination এবং Sorting কনফিগার
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("name").ascending());

// ডেটা রিট্রিভ
Page<MyEntity> page = myEntityRepository.findAll(pageable);

// পেজের ডেটা এবং তথ্য
List<MyEntity> entities = page.getContent();
long totalElements = page.getTotalElements();
int totalPages = page.getTotalPages();

২. Hibernate-এর মাধ্যমে Pagination

Hibernate-এ Pagination সাধারণত Query বা Criteria API ব্যবহার করে পরিচালিত হয়।

উদাহরণ (Hibernate Query):
Query query = session.createQuery("FROM MyEntity");
query.setFirstResult((pageNumber - 1) * pageSize);
query.setMaxResults(pageSize);
List<MyEntity> entities = query.list();
উদাহরণ (Hibernate Criteria API):
Criteria criteria = session.createCriteria(MyEntity.class);
criteria.setFirstResult((pageNumber - 1) * pageSize);
criteria.setMaxResults(pageSize);
List<MyEntity> entities = criteria.list();

৩. Spring Data JPA এবং Pagination

Spring Data JPA Pagination এবং Sorting সহজ করার জন্য রেডিমেড সমাধান দেয়।

Repository ইন্টারফেস:
public interface MyEntityRepository extends PagingAndSortingRepository<MyEntity, Long> {
}
পেজ ডেটা রিট্রিভ:
Page<MyEntity> page = myEntityRepository.findAll(PageRequest.of(pageNumber, pageSize, Sort.by("name").ascending()));

Pagination এবং Sorting এর সুবিধা

  1. ডেটা লোডিং দ্রুততর: ডেটাবেস থেকে প্রাসঙ্গিক ডেটা সীমিত করে নিয়ে আসা হয়।
  2. সার্ভার পারফরম্যান্স বৃদ্ধি: সার্ভারের উপর চাপ কমানো যায়।
  3. ব্যবহারকারীর অভিজ্ঞতা উন্নত: ওয়েব বা মোবাইল অ্যাপ্লিকেশনে বড় ডেটাসেট ব্যবস্থাপনা সহজ হয়।
  4. ডেটার নিয়ন্ত্রিত প্রদর্শন: প্রাসঙ্গিক ডেটা সাজিয়ে দেখানো সম্ভব।

Spring ORM-এর Pagination এবং Sorting বড় ডেটাসেটের ডেটা ম্যানেজমেন্ট এবং কার্যকর উপস্থাপনার জন্য অপরিহার্য। Hibernate এবং JPA উভয়েই এই বৈশিষ্ট্য সহজে প্রয়োগ করার পদ্ধতি সরবরাহ করে।


Content added By

Pagination এবং Sorting এর মৌলিক ধারণা

62
62

ডেটাবেস থেকে বড় পরিমাণে ডেটা রিট্রিভ করার সময় সিস্টেমের কার্যক্ষমতা বজায় রাখতে Pagination এবং Sorting গুরুত্বপূর্ণ ভূমিকা পালন করে। স্প্রিং ORM (Spring Data JPA) এই দুটি ফিচার সহজেই ইমপ্লিমেন্ট করার জন্য বিল্ট-ইন সাপোর্ট প্রদান করে।


Pagination

Pagination একটি প্রক্রিয়া যেখানে ডেটাবেস থেকে ডেটা আংশিকভাবে (পেজ আকারে) রিট্রিভ করা হয়। এটি বড় ডেটাসেট পরিচালনা করার জন্য ব্যবহৃত হয়।

কীভাবে Pagination কাজ করে?

Pagination দুটি মূল উপাদান দ্বারা নির্ধারিত হয়:

  • Page Size: এক পৃষ্ঠায় কতটি রেকর্ড দেখানো হবে।
  • Page Number: নির্দিষ্ট পৃষ্ঠার ডেটা রিট্রিভ করার জন্য পৃষ্ঠার ইনডেক্স।

উদাহরণ: Spring Data JPA এ Pagination

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Page<Employee> getPaginatedEmployees(int pageNumber, int pageSize) {
        return employeeRepository.findAll(PageRequest.of(pageNumber, pageSize));
    }
}

ব্যাখ্যা:

  • PageRequest.of(pageNumber, pageSize): এটি নির্ধারণ করে কোন পৃষ্ঠাটি এবং কতগুলো রেকর্ড ফেচ করতে হবে।
  • Page<Employee> ডেটা এবং মেটাডেটা (যেমন মোট পৃষ্ঠা সংখ্যা, রেকর্ড সংখ্যা) প্রদান করে।

Sorting

Sorting একটি প্রক্রিয়া যেখানে ডেটাকে নির্দিষ্ট একটি বা একাধিক ফিল্ডের উপর ভিত্তি করে ক্রমবদ্ধ করা হয়। এটি ডেটাকে ব্যবহারকারী বা অ্যাপ্লিকেশনের জন্য আরও উপযোগী করে তোলে।

কীভাবে Sorting কাজ করে?

Sorting এর দুটি মূল দিক:

  • Ascending Order (ASC): ক্রমবর্ধমান ক্রমে সাজানো।
  • Descending Order (DESC): ক্রমহ্রাসমান ক্রমে সাজানো।

উদাহরণ: Spring Data JPA এ Sorting

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public List<Employee> getSortedEmployees(String sortBy) {
        return employeeRepository.findAll(Sort.by(sortBy));
    }
}

ব্যাখ্যা:

  • Sort.by(sortBy): নির্ধারণ করে কোন ফিল্ডের উপর ভিত্তি করে ডেটা সাজানো হবে।
  • ডিফল্টভাবে এটি Ascending অর্ডারে সাজায়।

Pagination এবং Sorting একত্রে ব্যবহার

স্প্রিং ORM-এ Pagination এবং Sorting একসাথে সহজেই ব্যবহার করা যায়।

উদাহরণ: Pagination এবং Sorting এর সংযুক্ত ব্যবহার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Page<Employee> getPaginatedAndSortedEmployees(int pageNumber, int pageSize, String sortBy) {
        return employeeRepository.findAll(PageRequest.of(pageNumber, pageSize, Sort.by(sortBy)));
    }
}

ব্যাখ্যা:

  • PageRequest.of(pageNumber, pageSize, Sort.by(sortBy)): এটি পেজ এবং সর্ট উভয়ের জন্য প্যারামিটার সেট করে।

Pagination এবং Sorting এর সুবিধা

  • বড় ডেটাসেট পরিচালনা সহজ: ছোট ছোট অংশে ডেটা রিট্রিভ করা যায়।
  • ডেটা ভিজুয়ালাইজেশন: ব্যবহারকারীর প্রয়োজন অনুসারে ডেটা ক্রমবদ্ধ করা যায়।
  • কার্যক্ষমতা বৃদ্ধি: ডেটাবেস লোড কমায় এবং সার্ভারের রিসোর্স ব্যবহারে দক্ষতা বাড়ায়।
  • ব্যবহারকারী অভিজ্ঞতা উন্নত: ব্যবহারকারীদের প্রয়োজনীয় তথ্য সহজেই প্রদর্শিত হয়।

উদাহরণ: EmployeeRepository ইন্টারফেস

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
}

এই ইন্টারফেসটি JpaRepository এক্সটেন্ড করার মাধ্যমে Pagination এবং Sorting এর জন্য প্রয়োজনীয় সমস্ত মেথড প্রদান করে।


উপসংহার

স্প্রিং ORM-এ Pagination এবং Sorting বড় ডেটাসেটের কার্যকর ব্যবস্থাপনার জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলোর সাহায্যে বড় ডেটা সহজে পরিচালনা করা যায়, কার্যক্ষমতা বাড়ে এবং ব্যবহারকারীদের জন্য ডেটা উপস্থাপন আরও অর্থবহ হয়।


Content added By

Spring Data JPA এর PagingAndSortingRepository ব্যবহার করা

70
70

Spring Data JPA ডাটাবেস থেকে ডেটা রিট্রিভ করার জন্য পেজিনেশন এবং সোর্টিং সহজতর করে। Spring Data JPA এর PagingAndSortingRepository ইন্টারফেস ব্যবহার করে এই ফিচারগুলো সহজে ইমপ্লিমেন্ট করা যায়।


PagingAndSortingRepository ইন্টারফেস কি?

PagingAndSortingRepository ইন্টারফেসটি Spring Data JPA এর একটি উপাদান যা JpaRepository ইন্টারফেসের মতোই কাজ করে। তবে এটি ডেটা Pagination এবং Sorting এর জন্য অতিরিক্ত মেথড প্রদান করে।

মূলত এটি দুটি গুরুত্বপূর্ণ ফিচার সরবরাহ করে:

  • পেজিনেশন (Pagination)
  • সোর্টিং (Sorting)

প্রয়োজনীয় ডিপেনডেন্সি

pom.xml ফাইলে ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

Entity ক্লাস তৈরি করা

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }
}

PagingAndSortingRepository ইন্টারফেস ইমপ্লিমেন্ট করা

import org.springframework.data.repository.PagingAndSortingRepository;

public interface ProductRepository extends PagingAndSortingRepository<Product, Long> {
}

সার্ভিস ক্লাসে পেজিনেশন এবং সোর্টিং ব্যবহার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Page<Product> getProductsWithPagination(int page, int size) {
        Pageable pageable = PageRequest.of(page, size);
        return productRepository.findAll(pageable);
    }

    public Page<Product> getProductsWithSorting(int page, int size, String sortBy) {
        Pageable pageable = PageRequest.of(page, size, Sort.by(sortBy));
        return productRepository.findAll(pageable);
    }
}

কন্ট্রোলার তৈরি করা

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping
    public Page<Product> getProducts(@RequestParam int page,
                                      @RequestParam int size,
                                      @RequestParam(required = false) String sortBy) {
        if (sortBy != null) {
            return productService.getProductsWithSorting(page, size, sortBy);
        }
        return productService.getProductsWithPagination(page, size);
    }
}

অ্যাপ্লিকেশন প্রোপার্টিজ কনফিগারেশন

application.properties ফাইলটি কনফিগার করুন:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

HTTP রিকোয়েস্ট উদাহরণ

  1. পেজিনেশন:
    • GET /products?page=0&size=5
  2. পেজিনেশন এবং সোর্টিং:
    • GET /products?page=0&size=5&sortBy=price

সারাংশ

PagingAndSortingRepository Spring Data JPA এর একটি কার্যকর ফিচার যা সহজেই পেজিনেশন এবং সোর্টিং প্রদান করে। এর মাধ্যমে ডাটাবেস থেকে ডেটা রিট্রিভ করার কার্যকারিতা বৃদ্ধি পায় এবং কোড আরও সংক্ষিপ্ত হয়। ডেভেলপমেন্টে সময় বাঁচানোর জন্য এটি একটি দুর্দান্ত টুল।

Content added By

উদাহরণ সহ Pagination এবং Sorting বাস্তবায়ন

70
70

Pagination এবং Sorting এমন দুটি গুরুত্বপূর্ণ ফিচার যা বড় ডাটাবেজ ডেটা সেট পরিচালনা করতে ব্যবহৃত হয়। Pagination ডেটাকে ছোট ছোট অংশে ভাগ করে প্রদর্শন করে, এবং Sorting ডেটা সাজানোর জন্য ব্যবহৃত হয়। Spring Data JPA এর মাধ্যমে এগুলো সহজেই বাস্তবায়ন করা যায়।


প্রজেক্ট কনফিগারেশন

Spring Boot ব্যবহার করে Pagination এবং Sorting ইমপ্লিমেন্ট করার জন্য নিম্নলিখিত স্টেপগুলো অনুসরণ করুন।

pom.xml ডিপেন্ডেন্সি

Spring Boot এবং JPA এর ডিপেন্ডেন্সি যোগ করুন।

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

Entity তৈরি করা

package com.example.demo.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

Repository ইন্টারফেস তৈরি করা

Spring Data JPA এর মাধ্যমে PagingAndSortingRepository অথবা JpaRepository ব্যবহার করা যায়।

package com.example.demo.repository;

import com.example.demo.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}

সার্ভিস লেয়ার তৈরি করা

Pagination এবং Sorting অপারেশন সার্ভিস লেয়ারে পরিচালনা করুন।

package com.example.demo.service;

import com.example.demo.entity.Product;
import com.example.demo.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Page<Product> getProducts(int page, int size, String sortBy, String direction) {
        Sort sort = direction.equalsIgnoreCase("asc") ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
        Pageable pageable = PageRequest.of(page, size, sort);
        return productRepository.findAll(pageable);
    }
}

কন্ট্রোলার তৈরি করা

Pagination এবং Sorting এর জন্য REST API তৈরি করুন।

package com.example.demo.controller;

import com.example.demo.entity.Product;
import com.example.demo.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping("/products")
    public Page<Product> getProducts(
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size,
            @RequestParam(defaultValue = "name") String sortBy,
            @RequestParam(defaultValue = "asc") String direction
    ) {
        return productService.getProducts(page, size, sortBy, direction);
    }
}

ডেটাবেস টেস্ট ডেটা যোগ করা

Spring Boot এর CommandLineRunner ব্যবহার করে কিছু টেস্ট ডেটা ইনসার্ট করুন।

package com.example.demo;

import com.example.demo.entity.Product;
import com.example.demo.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class DataLoader implements CommandLineRunner {

    @Autowired
    private ProductRepository productRepository;

    @Override
    public void run(String... args) throws Exception {
        productRepository.save(new Product("Laptop", 800.00));
        productRepository.save(new Product("Smartphone", 500.00));
        productRepository.save(new Product("Tablet", 300.00));
        productRepository.save(new Product("Smartwatch", 150.00));
    }
}

API পরীক্ষার উদাহরণ

1. Pagination:

URL:
http://localhost:8080/products?page=0&size=2

Output:

{
    "content": [
        {
            "id": 1,
            "name": "Laptop",
            "price": 800.0
        },
        {
            "id": 2,
            "name": "Smartphone",
            "price": 500.0
        }
    ],
    "pageable": {
        "pageNumber": 0,
        "pageSize": 2,
        ...
    },
    ...
}

2. Sorting:

URL:
http://localhost:8080/products?page=0&size=10&sortBy=price&direction=desc

Output:

{
    "content": [
        {
            "id": 1,
            "name": "Laptop",
            "price": 800.0
        },
        {
            "id": 2,
            "name": "Smartphone",
            "price": 500.0
        },
        ...
    ]
}

সারাংশ

Spring ORM এবং JPA-র সাহায্যে Pagination এবং Sorting দ্রুত এবং সহজে ইমপ্লিমেন্ট করা যায়। Pageable এবং Sort ক্লাস ব্যবহার করে ডেটাকে ছোট অংশে ভাগ করা এবং নির্দিষ্ট ক্রমে সাজানো সম্ভব। এই পদ্ধতি বড় ডেটাসেট পরিচালনার জন্য খুবই কার্যকর।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion